package regexp;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 正则表达式底层实现
 */
public class RegTheory {

    public static void main(String[] args) {
        /*
            一个正则表达式，就是用某种模式取匹配字符串的一个公式。
            如：给定一个字符串，找出所有四个数字连在一起的子串
            1998 1999 3443 9889
         */
        String content =  "1998 年 12 月 8 日，第二代Java 平台的企业版J2EE发布。1999年6月，Sun公司发布了"
                +
                "第二代Java平台（简称为Java2）的3个版本：J2ME（Java2MicroEdition，Java2平台的微型"+
                "版），应用于移动、无线及有限资源的环境；J2SE（Java2StandardEdition，Java2平台的"+
                "标准版），应用于桌面环境；J2EE（Java2EnterpriseEdition，Java 2平台的企业版），应"+
                "用3443 于基于Java的应用服务器。Java2平台的发布，是Java发展过程中最重要的一个"+
                "里程碑，标志着Java的应用开始普及9889";
        //目标：匹配所有四个数字

        //1.\\d表示任意一个数字
        String regStr = "(\\d\\d)(\\d\\d)";
        //2.创建模式对象
        Pattern pattern = Pattern.compile(regStr);
        //3.创建匹配器， 按照 正则表达式的规则 去匹配 content字符串
        Matcher matcher = pattern.matcher(content);
        //4.开始匹配 matcher.find() 分组匹配
        while (matcher.find()) {
            //1. 如果正则表达式有() 即分组
            //2. 取出匹配的字符串规则如下
            //3. group(0) 表示匹配到的子字符串
            //4. group(1) 表示匹配到的子字符串的第一组字串
            //5. group(2) 表示匹配到的子字符串的第2组字串
            //6. ... 但是分组的数不能越界.
            System.out.println("找到: " + matcher.group(0));
            System.out.println("第 1 组()匹配到的值=" + matcher.group(1));
            System.out.println("第 2 组()匹配到的值=" + matcher.group(2));
        }

    }
}
